/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Modelo.Cliente;
import Modelo.Proveedor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Damian
 */
public class ControlCliente extends Conexion {

    public ControlCliente() {
    }

    final static String CLI_HISTORIADECLIENTE = "cli_historiadecliente";
    final static String CLI_EMPRESA = "cli_empresa";
    final static String CLI_NOMBRERESPONSABLE = "cli_nombreresponsable";
    final static String CLI_APELLIDORESPONSABLE = "cli_apellidoresponsable";
    final static String CLI_RUC = "cli_ruc";
    final static String CLI_CIUDAD = "cli_cuidad";
    final static String CLI_CALLEPRINCIPAL = "cli_calleprincipal";
    final static String CLI_CALLESECUNDARIA = "cli_callesecundaria";
    final static String CLI_NUMEROLOTE = "cli_numerolote";
    final static String CLI_TELEFONO = "cli_telefono";
    final static String sep = ", ";

//<editor-fold defaultstate="collapsed" desc="listar">
    public ArrayList<Cliente> listar() throws SQLException {
        ArrayList<Cliente> lista = null;
        lista = new ArrayList<>();
        String sql = "SELECT * FROM cliente";
        Connection cn = conectar();

        PreparedStatement ps;
        ps = cn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Cliente obj = new Cliente();
            obj.setHistoria(rs.getInt(CLI_HISTORIADECLIENTE));
            obj.setEmpresa(rs.getString(CLI_EMPRESA));
            obj.setNombres(rs.getString(CLI_NOMBRERESPONSABLE));
            obj.setApellidos(rs.getString(CLI_APELLIDORESPONSABLE));
            obj.setRuc(rs.getString(CLI_RUC));
            obj.setCiudad(rs.getString(CLI_CIUDAD));
            obj.setCalleprincipal(rs.getString(CLI_CALLEPRINCIPAL));
            obj.setCallesecundaria(rs.getString(CLI_CALLESECUNDARIA));
            obj.setNumerolote(rs.getString(CLI_NUMEROLOTE));
            obj.setTelefono(rs.getString(CLI_TELEFONO));
            lista.add(obj);
        }
        ps.close();
        desconectar(cn);

        // System.out.println(lista.toString());
        return lista;
    }
//</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="insertar">
    public void insertar(String empresa, String nombres,
            String apellidos, String ruc, String ciudad, String calleprincipal,
            String callesecundaria, String numerolote, String telefono)
            throws SQLException {

        Connection cn = conectar();

        if (cn.getAutoCommit()) {
            cn.setAutoCommit(false);
        }
        PreparedStatement ps;
        ps = cn.prepareStatement("INSERT INTO "
                + "cliente("
                + CLI_EMPRESA + ", " + CLI_NOMBRERESPONSABLE + "," + CLI_APELLIDORESPONSABLE + ","
                + CLI_RUC + " ," + CLI_CIUDAD + ","
                + CLI_CALLEPRINCIPAL + " ," + CLI_CALLESECUNDARIA + ","
                + CLI_NUMEROLOTE + ", " + CLI_TELEFONO + ")"
                + "VALUES (?,?,?,?,?,?,?,?,?) ");
        ps.setString(1, empresa);
        ps.setString(2, nombres);
        ps.setString(3, apellidos);
        ps.setString(4, ruc);
        ps.setString(5, ciudad);
        ps.setString(6, calleprincipal);
        ps.setString(7, callesecundaria);
        ps.setString(8, numerolote);
        ps.setString(9, telefono);

        int a = ps.executeUpdate();

        if (a >= 1) {
            System.out.println("Cliente Registrado Correctamente");
            cn.commit();
        }

    }
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="eliminar">
    public void eliminar(Integer cod) throws SQLException {
        Connection cn = conectar();
        ControlProdServ c = new ControlProdServ();
        c.eliminarProdProv(cod);
        PreparedStatement ps;
        ps = cn.prepareStatement("Delete from cliente where " + CLI_HISTORIADECLIENTE + "=?");
        ps.setInt(1, cod);
        int num = ps.executeUpdate();
        if (num != 0) {
            //JOptionPane.showMessageDialog(null, "eliminado");
            System.out.println("Cliente " + cod + " eliminado correctamente.");
        }
    }
//</editor-fold>

//    public void eliminar(String empresa) throws SQLException {
//        Connection cn = conectar();
//        PreparedStatement ps = cn.prepareStatement("Delete from proveedor where pro_empresa=?");
//        ps.setString(1, empresa);
//        int num = ps.executeUpdate();
//        if (num != 0) {
//            //JOptionPane.showMessageDialog(null, "eliminado");
//            System.out.println("Eliminando:" + empresa);
//        }
//    }
//<editor-fold defaultstate="collapsed" desc="buscarCliente">
    public Cliente buscarCliente(String empresa) throws SQLException {
        Cliente prov = null;
        String sql = "SELECT * FROM cliente WHERE " + CLI_HISTORIADECLIENTE + "=?";
        Connection cn = conectar();
        PreparedStatement ps;
        ps = cn.prepareStatement(sql);
        ps.setString(1, empresa);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Cliente obj = new Cliente();
            obj.setHistoria(rs.getInt(CLI_HISTORIADECLIENTE));
            obj.setEmpresa(rs.getString(CLI_EMPRESA));
            obj.setNombres(rs.getString(CLI_NOMBRERESPONSABLE));
            obj.setApellidos(rs.getString(CLI_APELLIDORESPONSABLE));
            obj.setRuc(rs.getString(CLI_RUC));
            obj.setCiudad(CLI_CIUDAD);
            obj.setCalleprincipal(CLI_CALLEPRINCIPAL);
            obj.setCallesecundaria(CLI_CALLESECUNDARIA);
            obj.setNumerolote(CLI_NUMEROLOTE);
            obj.setTelefono(CLI_TELEFONO);
            prov = obj;
        }
        desconectar(cn);

        //System.out.println(lista.toString());
        return prov;
    }
//</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="actualizar">
    public void actualizar(int historia, String empresa, String nombres,
            String apellidos, String ruc, String ciudad, String calleprincipal,
            String callesecundaria, String numerolote, String telefono) throws SQLException {

        Connection cn = conectar();

        if (cn.getAutoCommit()) {
            cn.setAutoCommit(false);
        }

        PreparedStatement ps;
        ps = cn.prepareStatement("UPDATE  cliente SET  "
                + CLI_EMPRESA + " =?," + CLI_NOMBRERESPONSABLE + "=?," + CLI_APELLIDORESPONSABLE + "=?,"
                + CLI_RUC + " =?," + CLI_CIUDAD + "=?," + CLI_CALLEPRINCIPAL + "=?,"
                + CLI_CALLESECUNDARIA + " =?," + CLI_NUMEROLOTE + "=?," + CLI_TELEFONO + "=?"
                + "WHERE " + CLI_HISTORIADECLIENTE + "=?");

        ps.setString(1, empresa);
        ps.setString(2, nombres);
        ps.setString(3, apellidos);
        ps.setString(4, ruc);
        ps.setString(5, ciudad);
        ps.setString(6, calleprincipal);
        ps.setString(7, callesecundaria);
        ps.setString(8, numerolote);
        ps.setString(9, telefono);
        ps.setInt(10, historia);

        int a = ps.executeUpdate();

        if (a >= 1) {
            System.out.println("Actualizado Registrado Correctamente");
            cn.commit();
        }

    }
//</editor-fold>

   public boolean validadorDeCedula(String cedula) {
        boolean cedulaCorrecta = false;

        try {

            if (cedula.length() == 10) // ConstantesApp.LongitudCedula
            {
                int tercerDigito = Integer.parseInt(cedula.substring(2, 3));
                if (tercerDigito < 6) {
// Coeficientes de validación cédula
// El decimo digito se lo considera dígito verificador
                    int[] coefValCedula = {2, 1, 2, 1, 2, 1, 2, 1, 2};
                    int verificador = Integer.parseInt(cedula.substring(9, 10));
                    int suma = 0;
                    int digito = 0;
                    for (int i = 0; i < (cedula.length() - 1); i++) {
                        digito = Integer.parseInt(cedula.substring(i, i + 1)) * coefValCedula[i];
                        suma += ((digito % 10) + (digito / 10));
                    }

                    if ((suma % 10 == 0) && (suma % 10 == verificador)) {
                        cedulaCorrecta = true;
                    } else if ((10 - (suma % 10)) == verificador) {
                        cedulaCorrecta = true;
                    } else {
                        cedulaCorrecta = false;
                    }
                } else {
                    cedulaCorrecta = false;
                }
            } else {
                cedulaCorrecta = false;
            }
        } catch (NumberFormatException nfe) {
            cedulaCorrecta = false;
        } catch (Exception err) {
            System.out.println("Una excepcion ocurrio en el proceso de validadcion");
            cedulaCorrecta = false;
        }

        if (!cedulaCorrecta) {
            System.out.println("La Cédula ingresada es Incorrecta");
        }
        return cedulaCorrecta;
    }
}
